﻿using System;
using System.Windows.Forms;
using Company.BLL;
using Company.BLL.KDT.GC;
using Company.BLL.DuLieuChuan;
using Janus.Windows.GridEX;
using System.Data;
using Company.BLL.KDT;

namespace Company.Interface.KDT.GC
{
    public partial class PhuKienGCManageForm : BaseForm
    {
        PhuKienDangKyCollection collection = new PhuKienDangKyCollection();
        PhuKienDangKy pkDangKy = new PhuKienDangKy();
        //-----------------------------------------------------------------------------------------
        public PhuKienGCManageForm()
        {
            InitializeComponent();
        }
        private void BindHopDong()
        {
            string maHQ = ctrDonViHaiQuan.Ma;
            DataTable dt;
            {
                string where = string.Format("[MaHaiQuan] LIKE '%{0}%'", maHQ);
                dt = HopDong.SelectDynamic(where, "").Tables[0];
            }
            cbHopDong.DataSource = dt;
            cbHopDong.DisplayMember = "SoHopDong";
            cbHopDong.ValueMember = "ID";
        }
        //-----------------------------------------------------------------------------------------
        /// <summary>
        /// Khởi tạo dữ liệu chuẩn.
        /// </summary>
        private void khoitao_DuLieuChuan()
        {
            this._DonViHaiQuan = DonViHaiQuan.SelectAll();
            this._DonViTinh = DonViTinh.SelectAll();
        }

        //-----------------------------------------------------------------------------------------
        private void PhuKienGCManageForm_Load(object sender, EventArgs e)
        {
            this.khoitao_DuLieuChuan();
            //dgList.DataSource = this.dmDangKy.DMCollection;
        }

        //-----------------------------------------------------------------------------------------
        /// <summary>
        /// Gửi thông tin đăng ký đến Hải quan.
        /// </summary>
        private void send()
        {            
            //try
            //{
            //    this.Cursor = Cursors.WaitCursor;
            //    if (this.dmDangKy.DMCollection.Count > 0)
            //    {
            //        // Master.
            //        this.dmDangKy.MaHaiQuan = ctrDonViHaiQuan.Ma;
            //        this.dmDangKy.MaDoanhNghiep = GlobalSettings.MA_DON_VI;
            //        this.dmDangKy.MaDaiLy = GlobalSettings.MA_DAI_LY;
            //        string returnMessage = string.Empty;
            //        this.dmDangKy.WSSend();
            //        txtSoTiepNhan.Text = this.dmDangKy.SoTiepNhan.ToString();
            //        lblTrangThai.Text = "Chờ duyệt chính thức";
            //        cmdSend.Enabled = Janus.Windows.UI.InheritableBoolean.False;
            //        cmdSave.Enabled = Janus.Windows.UI.InheritableBoolean.False;
            //        cmdAdd.Enabled = Janus.Windows.UI.InheritableBoolean.False;
            //        ShowMessage("Đăng ký thành công!\nSố tiếp nhận đăng ký điện tử: " + this.dmDangKy.SoTiepNhan.ToString(), false);
            //    }
            //}
            //catch (Exception ex)
            //{
            //    MessageBox.Show(ex.Message);
            //}
            //finally
            //{
            //    this.Cursor = Cursors.Default;
            //}
        }

        //-----------------------------------------------------------------------------------------
        /// <summary>
        /// Thêm mới định mức.
        /// </summary>
        private void add()
        {
            //DinhMucEditForm f = new DinhMucEditForm();
            //f.OpenType = OpenFormType.Insert;
            //f.MaDoanhNghiep = GlobalSettings.MA_DON_VI;
            //f.MaHaiQuan = ctrDonViHaiQuan.Ma;
            //f.ShowDialog();

            //if (f.DMDetail != null)
            //{
            //    this.dmDangKy.DMCollection.Add(f.DMDetail);
            //    dgList.Refetch();
            //}
        }

        //-----------------------------------------------------------------------------------------

        //-----------------------------------------------------------------------------------------
        private void dgList_LoadingRow(object sender, RowLoadEventArgs e)
        {
            //e.Row.Cells[2].Text = this.LoaiPhuKien_GetName(e.Row.Cells[1].Text);            
            string st = e.Row.Cells[4].Value.ToString();
            if (st == "-1")
                e.Row.Cells[4].Text = "Chưa khai báo";
            else if (st == "0")
                e.Row.Cells[4].Text = "Chờ duyệt";
            else if (st == "1")
                e.Row.Cells[4].Text = "Đã duyệt";
            HopDong hopdong = HopDong.Load((long)Convert.ToInt64(e.Row.Cells[5].Text));
            e.Row.Cells[5].Text = hopdong.SoHopDong;
        }

        //-----------------------------------------------------------------------------------------
        private void dgList_RowDoubleClick(object sender, RowActionEventArgs e)
        {
            HopDong hopdong=HopDong.Load((long)Convert.ToInt64(e.Row.Cells[5].Value));
            Form[] forms = this.ParentForm.MdiChildren;
            for (int i = 0; i < forms.Length; i++)
            {
                if (forms[i].Name.ToString().Equals("ThemPK" + e.Row.Cells[1].Text))
                {
                    forms[i].Activate();
                    return;
                }
            }
            Company.Interface.KDT.GC.PhuKienGCSendForm pk = new Company.Interface.KDT.GC.PhuKienGCSendForm();
            pk.hopdong = hopdong;            
            pk.phukien.SoPhuKien = e.Row.Cells[1].Text.Trim();
            pk.phukien.NgayPhuKien = Convert.ToDateTime(e.Row.Cells[2].Text);
            pk.Name = "ThemPK" + e.Row.Cells[1].Text.Trim();
            pk.MdiParent = this.ParentForm; ;
            pk.Show();
        }

        //-----------------------------------------------------------------------------------------
        /// <summary>
        /// Lưu thông tin.
        /// </summary>
        private void save()
        {
            //try
            //{
            //    this.Cursor = Cursors.WaitCursor;
            //    if (this.dmDangKy.DMCollection.Count > 0)
            //    {
            //        // Master.
            //        this.dmDangKy.MaHaiQuan = ctrDonViHaiQuan.Ma;
            //        if (this.dmDangKy.ID == 0)
            //        {
            //            this.dmDangKy.MaDaiLy = GlobalSettings.MA_DAI_LY;
            //            this.dmDangKy.MaDoanhNghiep = GlobalSettings.MA_DON_VI;                        
            //            this.dmDangKy.TrangThaiXuLy = TrangThaiXuLy.CHUA_KHAI_BAO;
            //            //this.dmDangKy.SoTiepNhan = 0;
            //            //this.dmDangKy.NgayTiepNhan = DateTime.Today;
                        
            //        }                    
            //        // Detail.
            //        int sttHang = 1;
            //        foreach (DinhMuc nplD in this.dmDangKy.DMCollection)
            //        {
            //            nplD.STTHang = sttHang++;
            //        }

            //        if (this.dmDangKy.InsertUpdateFull()) 
            //            ShowMessage("Cập nhật thành công", false);
            //        else
            //            ShowMessage("Cập nhật không thành công", false);
            //    }
            //}
            //catch (Exception ex)
            //{
            //    MessageBox.Show("Có lỗi:" + ex.Message);
            //}
            //finally
            //{
            //    this.Cursor = Cursors.Default;
            //}        
        }

        //-----------------------------------------------------------------------------------------
        private void cmMain_CommandClick(object sender, Janus.Windows.UI.CommandBars.CommandEventArgs e)
        {
            switch (e.Command.Key)
            {
                case "KhaiBao": khaibaoHD(); break;
                case "NhanDuLieu": nhandulieuHD(); break;
                case "Huy": HuyNhieuHD(); break;
            }
        }
        private void nhandulieuHD()
        {
            NhanDuLieuCTMenu_Click(null, null);
        }
        private void btnSearch_Click(object sender, EventArgs e)
        {
            string where = "1=1";
            if (txtSoTiepNhan.Text.Trim().Length > 0)
            {
                where += " and sotiepnhan=" + txtSoTiepNhan.Text;
            }
            if (cbHopDong.Text.Length > 0)
            {
                where += " and HopDong_ID=" + cbHopDong.Value.ToString();
            }

            if (txtNamTiepNhan.Text.Trim().Length > 0)
            {
                where += " and year(ngaytiepnhan)=" + txtNamTiepNhan.Text;
            }
            if (cbStatus.Text.Length > 0)
                where += " and TrangThaiXuLy=" + cbStatus.SelectedValue.ToString();
            collection = Company.BLL.KDT.GC.PhuKienDangKy.SelectCollectionDynamic(where, "");
            dgPhuKien.DataSource = collection;
            
        }

        private void khaibaoHD()
        {
            khaibaoCTMenu_Click(null, null);
        }
        private void HuyNhieuHD()
        {
            HuyCTMenu_Click(null, null);
        }
        private void khaibaoCTMenu_Click(object sender, EventArgs e)
        {

            try
            {
                if (dgPhuKien.GetRow() != null)
                {
                    pkDangKy = (PhuKienDangKy)dgPhuKien.GetRow().DataRow;
                    HopDong hd = HopDong.Load(pkDangKy.HopDong_ID);
                    if (!(hd.TrangThaiXuLy == TrangThaiXuLy.DA_DUYET))
                    {
                        ShowMessage("Hợp đồng chưa được duyệt. Không được gửi phụ kiện ", false);
                        return;
                    }
                    WSForm wsForm = new WSForm();
                    wsForm.ShowDialog(this);
                    if (!wsForm.IsReady) return;
                    try
                    {
                        this.Cursor = Cursors.WaitCursor;
                        pkDangKy.WSSend();
                        this.Cursor = Cursors.Default;
                        ShowMessage("Đã gửi thành công. Số tiếp nhận của bạn là " + pkDangKy.SoTiepNhan.ToString(), false);
                        btnSearch_Click(null, null);
                    }
                    catch (Exception ex)
                    {
                        this.Cursor = Cursors.Default;
                        if (ex.Message == "1")
                            ShowMessage("Phụ kiện này đã được duyệt chính thức trên hải quan", false);
                        else
                            throw ex;
                    }
                }
            }
            catch (Exception Ex)
            {
                if (ShowMessage("Khai báo không thành công.\nLỗi: " + Ex.Message + ".\nBạn có muốn đưa vào hàng đợi không?", true) == "Yes")
                {
                    PhuKienDangKy pkHangDoi = PhuKienDangKy.SelectCollectionBy_HopDong_IDANDSoPhuKienANDNgayPhuKien(pkDangKy.HopDong_ID, pkDangKy.SoPhuKien, pkDangKy.NgayPhuKien)[0];
                    HangDoi hd = new HangDoi();
                    hd.ID = pkHangDoi.ID;
                    hd.LoaiToKhai = LoaiToKhai.PHU_KIEN;
                    hd.TrangThai = pkDangKy.TrangThaiXuLy;
                    hd.ChucNang = ChucNang.KHAI_BAO;
                    MainForm.AddToQueueForm(hd);
                    MainForm.ShowQueueForm();
                }
            }
        }
        private void NhanDuLieuCTMenu_Click(object sender, EventArgs e)
        {
            try
            {
                if (dgPhuKien.GetRow() != null)
                {
                    pkDangKy = (PhuKienDangKy)dgPhuKien.GetRow().DataRow;
                    HopDong hd = HopDong.Load(pkDangKy.HopDong_ID);                   
                    if (!(hd.TrangThaiXuLy == TrangThaiXuLy.DA_DUYET))
                    {
                        ShowMessage("Hợp đồng chưa được duyệt. Không được gửi phụ kiện ", false);
                        return;
                    }
                    WSForm wsForm = new WSForm();
                    wsForm.ShowDialog(this);
                    if (!wsForm.IsReady) return;
                    try
                    {
                        this.Cursor = Cursors.WaitCursor;
                        pkDangKy.WSRequest();
                        this.Cursor = Cursors.Default;
                        if(pkDangKy.TrangThaiXuLy==1)
                            ShowMessage("Phụ kiện đã được duyệt.", false);
                        else
                            ShowMessage("Phụ kiện chưa được duyệt.", false);
                        btnSearch_Click(null, null);
                    }
                    catch (Exception ex)
                    {
                        this.Cursor = Cursors.Default;                        
                            throw ex;
                    }
                }
            }
            catch (Exception Ex)
            {
                if (ShowMessage("Nhận dữ liệu phụ kiện không thành công.\nLỗi: " + Ex.Message + ".\nBạn có muốn đưa vào hàng đợi không?", true) == "Yes")
                {
                    PhuKienDangKy pkHangDoi = PhuKienDangKy.SelectCollectionBy_HopDong_IDANDSoPhuKienANDNgayPhuKien(pkDangKy.HopDong_ID, pkDangKy.SoPhuKien, pkDangKy.NgayPhuKien)[0];
                    HangDoi hd = new HangDoi();
                    hd.ID = pkHangDoi.ID;
                    hd.LoaiToKhai = LoaiToKhai.PHU_KIEN;
                    hd.TrangThai = pkDangKy.TrangThaiXuLy;
                    hd.ChucNang = ChucNang.NHAN_THONG_TIN;
                    MainForm.AddToQueueForm(hd);
                    MainForm.ShowQueueForm();
                }
            }
        }

        private void HuyCTMenu_Click(object sender, EventArgs e)
        {
            try
            {
                if (dgPhuKien.GetRow() != null)
                {
                    pkDangKy = (PhuKienDangKy)dgPhuKien.GetRow().DataRow;
                    WSForm wsForm = new WSForm();
                    wsForm.ShowDialog(this);
                    if (!wsForm.IsReady) return;
                    try
                    {
                        this.Cursor = Cursors.WaitCursor;
                        pkDangKy.WSCancel();
                        this.Cursor = Cursors.Default;
                        ShowMessage("Đã hủy thành công.", false);
                        btnSearch_Click(null, null);
                    }
                    catch (Exception ex)
                    {
                        this.Cursor = Cursors.Default;
                        if (ex.Message == "1")
                            ShowMessage("Phụ kiện này đã được duyệt chính thức trên hải quan", false);
                        else
                            throw ex;
                    }
                }
            }
            catch (Exception Ex)
            {
                if (ShowMessage("Hủy phụ kiện không thành công.\nLỗi: " + Ex.Message + ".\nBạn có muốn đưa vào hàng đợi không?", true) == "Yes")
                {
                    PhuKienDangKy pkHangDoi = PhuKienDangKy.SelectCollectionBy_HopDong_IDANDSoPhuKienANDNgayPhuKien(pkDangKy.HopDong_ID, pkDangKy.SoPhuKien, pkDangKy.NgayPhuKien)[0];
                    HangDoi hd = new HangDoi();
                    hd.ID = pkHangDoi.ID;
                    hd.LoaiToKhai = LoaiToKhai.PHU_KIEN;
                    hd.TrangThai = pkDangKy.TrangThaiXuLy;
                    hd.ChucNang = ChucNang.HUY_KHAI_BAO;
                    MainForm.AddToQueueForm(hd);
                    MainForm.ShowQueueForm();
                }
            }
        }
        private void ctrDonViHaiQuan_ValueChanged(object sender, EventArgs e)
        {
            BindHopDong();
        }

        private void cbStatus_SelectedIndexChanged(object sender, EventArgs e)
        {            
            if (cbStatus.SelectedValue.ToString() == "-1")
            {
                Huy1.Enabled = Janus.Windows.UI.InheritableBoolean.False;
                cmdGet1.Enabled = Janus.Windows.UI.InheritableBoolean.False;
                HuyCTMenu.Enabled = false;
                NhanDuLieuCTMenu.Enabled = false;
                khaibaoCTMenu.Enabled = true;
                KhaiBao1.Enabled = Janus.Windows.UI.InheritableBoolean.True;
            }
            else if (cbStatus.SelectedValue.ToString() == "0")
            {
                Huy1.Enabled = Janus.Windows.UI.InheritableBoolean.True;
                cmdGet1.Enabled = Janus.Windows.UI.InheritableBoolean.True;
                HuyCTMenu.Enabled = true;
                NhanDuLieuCTMenu.Enabled = true;
                khaibaoCTMenu.Enabled = true;
                KhaiBao1.Enabled = Janus.Windows.UI.InheritableBoolean.True;
            }
            else
            {
                Huy1.Enabled = Janus.Windows.UI.InheritableBoolean.False;
                cmdGet1.Enabled = Janus.Windows.UI.InheritableBoolean.False;
                HuyCTMenu.Enabled = false;
                NhanDuLieuCTMenu.Enabled = false;
                khaibaoCTMenu.Enabled = false;
                KhaiBao1.Enabled = Janus.Windows.UI.InheritableBoolean.False;
            }
        }

        private void dgPhuKien_DeletingRecord(object sender, RowActionCancelEventArgs e)
        {
            string st = e.Row.Cells[4].Value.ToString();
            if (st == "0")
            {
                ShowMessage("Phụ kiện này đã được gửi tới hải quan.Không được xóa ?", false);
                e.Cancel = true;
            }
            else if (st == "1")
            {
                ShowMessage("Phụ kiện này đã được duyệt. Không được xóa", false);
                e.Cancel = true;
                return;
            }
            if (ShowMessage("Bạn có muốn xóa không ?", true) == "Yes")
            {
                string sophukien = e.Row.Cells[1].Text;
                DateTime ngayphukien = Convert.ToDateTime(e.Row.Cells[2].Value);
                long id = (long)Convert.ToInt64(e.Row.Cells[1].Value.ToString());
                PhuKienDangKyCollection pkDeleteCollecltion = PhuKienDangKy.SelectCollectionBy_HopDong_IDANDSoPhuKienANDNgayPhuKien(id, sophukien, ngayphukien);
                PhuKienDangKy pkDelete = new PhuKienDangKy();
                pkDelete.DeleteCollection(pkDeleteCollecltion);
            }
            else
                e.Cancel = true;
        }
    }
}